/**
 * 字符串处理工具函数
 */

/**
 * 首字母大写
 * @param {string} str 字符串
 * @returns {string} 首字母大写的字符串
 */
export function capitalize(str) {
  if (!str) return ''
  return str.charAt(0).toUpperCase() + str.slice(1)
}

/**
 * 驼峰命名转下划线
 * @param {string} str 驼峰命名字符串
 * @returns {string} 下划线命名字符串
 */
export function camelToSnake(str) {
  if (!str) return ''
  return str.replace(/([A-Z])/g, '_$1').toLowerCase()
}

/**
 * 下划线转驼峰命名
 * @param {string} str 下划线命名字符串
 * @returns {string} 驼峰命名字符串
 */
export function snakeToCamel(str) {
  if (!str) return ''
  return str.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase())
}

/**
 * 截取字符串并添加省略号
 * @param {string} str 原字符串
 * @param {number} length 截取长度
 * @param {string} suffix 后缀，默认 '...'
 * @returns {string} 截取后的字符串
 */
export function truncate(str, length, suffix = '...') {
  if (!str) return ''
  if (str.length <= length) return str
  return str.substring(0, length) + suffix
}

/**
 * 移除字符串中的HTML标签
 * @param {string} str HTML字符串
 * @returns {string} 纯文本字符串
 */
export function stripHtml(str) {
  if (!str) return ''
  return str.replace(/<[^>]*>/g, '')
}

/**
 * 生成随机字符串
 * @param {number} length 长度
 * @param {string} chars 字符集
 * @returns {string} 随机字符串
 */
export function randomString(length = 8, chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
  let result = ''
  for (let i = 0; i < length; i++) {
    result += chars.charAt(Math.floor(Math.random() * chars.length))
  }
  return result
}

/**
 * 格式化文件大小
 * @param {number} bytes 字节数
 * @param {number} decimals 小数位数
 * @returns {string} 格式化后的文件大小
 */
export function formatFileSize(bytes, decimals = 2) {
  if (bytes === 0) return '0 Bytes'
  
  const k = 1024
  const dm = decimals < 0 ? 0 : decimals
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
  
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
}

/**
 * 手机号脱敏
 * @param {string} phone 手机号
 * @returns {string} 脱敏后的手机号
 */
export function maskPhone(phone) {
  if (!phone) return ''
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

/**
 * 身份证脱敏
 * @param {string} idCard 身份证号
 * @returns {string} 脱敏后的身份证号
 */
export function maskIdCard(idCard) {
  if (!idCard) return ''
  return idCard.replace(/(\d{6})\d{8}(\d{4})/, '$1********$2')
}